package com.zenithmind.mall.pojo.dto;

import lombok.Data;

import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券DTO
 * 
 * @author ZenithMind Team
 * @since 2025-06-09
 */
@Data
public class CouponDTO {

    /**
     * 优惠券名称
     */
    @NotBlank(message = "优惠券名称不能为空")
    @Size(max = 100, message = "优惠券名称长度不能超过100个字符")
    private String name;

    /**
     * 优惠券描述
     */
    @Size(max = 500, message = "优惠券描述长度不能超过500个字符")
    private String description;

    /**
     * 优惠券类型（1-满减券，2-折扣券，3-免邮券）
     */
    @NotNull(message = "优惠券类型不能为空")
    @Min(value = 1, message = "优惠券类型值无效")
    @Max(value = 3, message = "优惠券类型值无效")
    private Integer type;

    /**
     * 优惠金额（满减券使用）
     */
    @DecimalMin(value = "0.01", message = "优惠金额必须大于0")
    private BigDecimal discountAmount;

    /**
     * 优惠金额（兼容性字段，与discountAmount相同）
     */
    @DecimalMin(value = "0.01", message = "优惠金额必须大于0")
    private BigDecimal amount;

    /**
     * 折扣率（折扣券使用，如85表示8.5折）
     */
    @DecimalMin(value = "1", message = "折扣率必须大于等于1")
    @DecimalMax(value = "99", message = "折扣率必须小于100")
    private BigDecimal discountRate;

    /**
     * 最低消费金额
     */
    @DecimalMin(value = "0", message = "最低消费金额不能为负数")
    private BigDecimal minAmount;

    /**
     * 最高优惠金额
     */
    @DecimalMin(value = "0", message = "最高优惠金额不能为负数")
    private BigDecimal maxAmount;

    /**
     * 发放总数量
     */
    @Min(value = 1, message = "发放总数量必须大于0")
    private Integer totalCount;

    /**
     * 每人限领数量
     */
    @Min(value = 1, message = "每人限领数量必须大于0")
    private Integer limitPerUser;

    /**
     * 开始时间
     */
    @NotNull(message = "开始时间不能为空")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @NotNull(message = "结束时间不能为空")
    private LocalDateTime endTime;

    /**
     * 状态（0-禁用，1-启用）
     */
    private Integer status;

    /**
     * 适用商品范围（0-全部商品，1-指定分类，2-指定商品）
     */
    private Integer applicableScope;

    /**
     * 适用商品ID列表（JSON格式）
     */
    private String applicableProductIds;

    /**
     * 适用分类ID列表（JSON格式）
     */
    private String applicableCategoryIds;

    /**
     * 排序值
     */
    private Integer sort;

    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500个字符")
    private String remark;
}
